package com.payment.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 杭州银行参数工具类
 * 
 * @create 2012-12-25
 * @version V1.0.0
 * @author wangheng
 *
 */

@Component
public class HZBANKSetting {
	private static final Logger logger = LoggerFactory.getLogger(HZBANKSetting.class);
	
	public static boolean		isAPIInitialize = false;//是否初始化

    public static boolean		EnableLog;            	//日志开关（true:表示写日志,false: 表示不写日志）

    public static String		LogPath;              	//日志文件存放目录  (格式：C:/hzbankjava/log/)
    
    public static String		CertPath;              	//证书文件存放目录  (格式：C:/hzbankjava/)
    
    public static List<MerchantCert>	mcs = new ArrayList<MerchantCert>();
    
    public static List<String>		RootCertFile = new ArrayList<String>();         	//根证书文件 (格式：C:/hzbankjava/HZBANKCert/TESTCA.cer)
    
    public static List<String>		BankDN = new ArrayList<String>();         		//银行证书DN (格式：7571110030)

    
    public HZBANKSetting() {
    }
    
    /**
     * 初始化 杭州银行签名所用参数
     * @param enableLog	日志开关
     * @param logPath	日志文件存放目录
     * @param merchantCertFile	商户证书文件路径
     * @param merchantCertPassword	商户证书密码
     * @param rootCertFile	根证书文件路径		
     * @param bankDN	银行证书DN
     * @return boolean
     */
    public  int initialize(boolean enableLog,String logPath,String certPath,String merchantCertFile,
    		String merchantCertPassword,String rootCertFile,String bankDN){
    	
    	//*******************初始化参数*****************************
    	if(!isAPIInitialize){
    		EnableLog = enableLog;
    		CertPath = certPath;

    		if (EnableLog) {
                if (logPath == null || logPath.trim().length() == 0) {
                    logger.info("日志开关设置为true,日志文件名设置错误，设置参数不能为空");
                    return -1;
                }else {
                    try {
                    	String tmp = logPath.substring(0, logPath.lastIndexOf("/")+1);
                        new File(tmp).mkdirs();
                        //LogPath = new File(logPath).getAbsolutePath();
                        LogPath = logPath;
                    }catch (Exception xcp) {
                        logger.info("日志开关设置为true,日志文件存放目录设置错误，请确定路径是否配置正确");
                        return -1;
                    }
                }
    		}
    		
            if (merchantCertFile == null || merchantCertFile.trim().length() == 0) {
                logger.info("商户证书文件路径设置错误，设置参数不能为空");
                return -1;
            }
            
            if (merchantCertPassword == null || merchantCertPassword.trim().length() == 0) {
                logger.info("商户证书密码设置错误，设置参数不能为空");
                return -1;
            }
            
            String tmp[] = merchantCertFile.split("\\|");
            String tmp2[] = merchantCertPassword.split("\\|");
            for(int i=0;i<tmp.length;i++){
            	
            	if (!new File(certPath + tmp[i]).isFile()) {
                    logger.info("商户证书文件路径设置错误，请确定路径及文件名是否配置正确");
                    return -1;
                }
            	
            	MerchantCert mc = new MerchantCert();
            	mc.setMerchantCertFileName(new File(tmp[i]).getName());
            	mc.setMerchantCertPassword(tmp2[i]);
            	mcs.add(mc);
            }
            
            if (rootCertFile == null || rootCertFile.trim().length() == 0) {
                logger.info("根证书文件路径设置错误，设置参数不能为空");
                return -1;
            }
            
            if (bankDN == null || bankDN.trim().length() == 0) {
                logger.info("银行证书DN设置错误，设置参数不能为空");
                return -1;
            }
            
            tmp = rootCertFile.split("\\|");
            
            for(int i=0;i<tmp.length;i++){
            	if (!new File(certPath + tmp[i]).isFile()) {
                    logger.info("根证书文件路径设置错误，请确定路径及文件名是否配置正确");
                    return -1;
                }
            	RootCertFile.add(tmp[i]);
            }
            
            tmp = bankDN.split("\\|");
            for(int i=0;i<tmp.length;i++){
            	BankDN.add(tmp[i]);
            }
    		
        	logger.info("日志开关："+HZBANKSetting.EnableLog);
        	logger.info("日志文件存放："+HZBANKSetting.LogPath);
        	logger.info("证书文件存放目录："+HZBANKSetting.CertPath);
        	//logger.info("商户证书密码 ："+HZBANKSetting.MerchantCertPassword);
        	logger.info("根证书文件："+HZBANKSetting.RootCertFile);
        	logger.info("银行证书DN："+HZBANKSetting.BankDN);
        	
    		isAPIInitialize = true;
    	}
    	//*******************初始化签名*****************************
    	if(isAPIInitialize = true){
    		try {
    			new NetSignServer();
    			//logger.info("商户号："+HZBANKSetting.MerchantID);
    			//logger.info("商户证书DN："+HZBANKSetting.MerchantCertDN);
    			logger.info("签名控件初始化成功!");
    		}catch (Exception xcp) {
    		}
    		if (NetSignServer.isAPIPropertySetted == false) {
    			logger.info("签名控件初始化失败");
    			return -1;
    		}
    	}

    	return 0;
    }
    
}

